package com.gle.self

import com.android.build.gradle.AppExtension
import org.gradle.api.Plugin
import org.gradle.api.Project

/**
 *
 * 开发只针对当前项目的Gradle插件
 * 前面我们讲了如何自定义gradle插件并且打包出去，可能步骤比较多。有时候，你可能并不需要打包出去，只是在这一个项目中使用而已，那么你无需打包这个过程。
 *
 * (1) 首先，你得新建一个Android Project
 * (2) 然后再新建一个Module，这个Module名字必须为buildSrc
 * (3) 将Module里面的内容删除，只保留build.gradle文件和src/main目录。
 * 由于gradle是基于groovy，因此，我们开发的gradle插件相当于一个groovy项目。所以需要在main目录下新建groovy目录
 * (4) groovy又是基于Java，因此，接下来创建groovy的过程跟创建java很类似。在groovy新建包名，如：com.gle.self，然后在该包下新建groovy文件，通过new->file->MySelfPlugin.groovy来新建名为MySelfPlugin的groovy文件。
 * (5) 为了让我们的groovy类申明为gradle的插件，新建的groovy需要实现org.gradle.api.Plugin接口。如下所示：
 * (6) 现在，我们已经定义好了自己的gradle插件类，接下来就是告诉gradle，哪一个是我们自定义的插件类，因此，需要在main目录下新建resources目录，然后在resources目录里面再新建META-INF目录，再在META-INF里面新建gradle-plugins目录。最后在gradle-plugins目录里面新建properties文件，
 * 注意这个文件的命名，你可以随意取名，但是后面使用这个插件的时候，会用到这个名字。比如，你取名为com.gle.selfplugin.properties，而在其他build.gradle文件中使用自定义的插件时候则需写成：
 */
public class MySelfPlugin implements Plugin<Project> {

    void apply(Project project) {

        System.out.println("***********************");
        System.out.println("self gradle plugin!");
        System.out.println("***********************");

        project.extensions.create("student", Student);
        project.extensions.create("apkdistconf", ApkDistExtension);

        AppExtension appExtension= project.extensions.getByType(AppExtension)
        //注册Transform
        appExtension.registerTransform(new MyTransform())

        //需要afterEvaluate后执行
        project.afterEvaluate {
            readParams(project)

            createNewTask(project)
        }

    }

    void readParams(Project project) {
        def stu = project.extensions.findByName("student") as Student
        println("name:" + stu.name + " sex:" + stu.sex + " age:" + stu.age)
        println(project["android"].buildToolsVersion)
    }

    void createNewTask(Project project) {
        project.task('apkdist') {
            println 'task===hello, world!'

            def closure = project['apkdistconf'].nameMap;
            closure('wow!');

            println project['apkdistconf'].destDir
        }
    }


}